The Small Computer Standard Interface (SCSI) is a specification of the mechanical, electrical, and functional standards followed when coupling small computers to intelligent peripherals such as hard disks, printers, and optical disks. Typically, a part of the operating system, the SCSI manager, is employed to provide routines and data structures to control the exchange of information between the small computer and the peripheral devices.
Devices are usually connected to a SCSI bus in a daisy-chain configuration. When two SCSI devices communicate with each other, one acts as an "initiator" and the other as a "target." The initiator asks the target to perform a certain operation, such as reading a block of data. Before any operation can occur, the initiator must first gain control of the bus, select a target device, and then instruct the target device regarding which operation is to be performed.
When the command to be performed involves a transfer of data, a pointer must be passed to a transfer instruction block which indicates to the SCSI manager how the data is to be manipulated. In the prior art, data could only be read from or written into contiguous memory locations. Moreover, data transfers which required multiple buffers to be used, would have to be separated into several calls to the operating system. Furthermore, during actual data transfer process, the running of application procedures between calls to the operating system caused a loss of system performance.
As will be seen, the present invention involves a mechanism which allows data to be read from or written into memory non-contiguously. Moreover, a single buffer may be employed repeatedly without having to divide a transaction into several calls to the operating system. The present invention also includes a mechanism which allows for application routines to be called in between data calls of an actual data transfer process without loss to system performance.